﻿

namespace SuperMarieApi.App.Controllers.Tool.Extensions
{
    using System;

    public static class DateTimeExte
    {
        /// <summary>
        /// 将日期类型数据转换为 yyyy-MM-dd 这种格式
        /// </summary>
        /// <param name="dateTime">要转换的日期类型数据</param>
        /// <returns>返回转换后的日期数据</returns>
        public static string ToDateyyyyMMdd(this DateTime? dateTime)
        {
            if (dateTime != null)
            {
                return dateTime.ToString().ToDateTime(DateTime.MinValue).ToString("yyyy-MM-dd");
            }

            return "";
        }


        /// <summary>
        /// 将日期类型数据转换为 yy-MM-dd 这种格式
        /// </summary>
        /// <param name="dateTime">要转换的日期类型数据</param>
        /// <returns>返回转换后的日期数据</returns>
        public static string ToDateyyMMdd(this DateTime? dateTime)
        {
            if (dateTime != null)
            {
                return dateTime.ToString().ToDateTime(DateTime.MinValue).ToString("yy-MM-dd");
            }

            return "";
        }


        /// <summary>
        /// 将日期类型数据转换为 MM-dd hh 这种格式
        /// </summary>
        /// <param name="dateTime">要转换的日期类型数据</param>
        /// <returns>返回转换后的日期数据</returns>
        public static string ToDateMMddhhmm(this DateTime? dateTime)
        {
            if (dateTime != null)
            {
                DateTime dt = dateTime.ToString().ToDateTime(DateTime.MinValue);
                return dt.Month + "-" + dt.Day + " " + dt.Hour + ":" + dt.Minute;
            }

            return "";
        }

        /// <summary>
        /// 将指定日期转换成yyyy年MM月dd日形式
        /// </summary>
        /// <param name="datetimestr">要转换的日期类型数据</param>
        /// <returns>返回转换后的日期数据</returns>
        public static string ToDateyyyyMMddZ(this DateTime? datetimestr)
        {
            string dateStr = "";
            if (datetimestr == null || datetimestr.ToString().Equals(""))
            {
                return "";
            }

            try
            {

                DateTime date = Convert.ToDateTime(datetimestr);
                string year = date.Year.ToString();
                string month = date.Month.ToString();
                string day = date.Day.ToString();
                dateStr = year + "年" + month + "月" + day + "日";
            }
            catch
            {
                return "";
            }
            return dateStr;

        }


        /// <summary>
        /// 转换时间为unix时间戳
        /// </summary>
        /// <param name="date">需要传递UTC时间,避免时区误差,例:DataTime.UTCNow</param>
        /// <returns>返回指定DateTime的unix时间戳</returns>
        public static double ConvertToUnixTimestamp(this DateTime date)
        {
            DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
            TimeSpan diff = date - origin;
            return Math.Floor(diff.TotalSeconds);
        }


        /// <summary>
        /// 已重载.计算两个日期的时间间隔,返回的是时间间隔的日期差的绝对值.
        /// </summary>
        /// <param name="DateTime1">第一个日期和时间</param>
        /// <param name="DateTime2">第二个日期和时间</param>
        /// <returns></returns>
        public static TimeSpan DateDiff(DateTime DateTime1, DateTime DateTime2)
        {
            TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
            TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
            TimeSpan ts = ts1.Subtract(ts2).Duration();
            return ts;
        }

        /// <summary>
        /// 将日期类型数据转换为 yyyyMMddhhmmss 这种格式
        /// </summary>
        /// <param name="dateTime">要转换的日期类型数据</param>
        /// <returns>返回转换后的日期数据</returns>
        public static string ToDateyyyyMMddhhmmss(this DateTime? dateTime)
        {
            if (dateTime != null)
            {
                DateTime dt = dateTime.ToString().ToDateTime(DateTime.MinValue);
                return dt.Year.ToString() + dt.Month.ToString() + dt.Day.ToString() + dt.Hour.ToString() + dt.Minute.ToString() + dt.Second.ToString();
            }

            return "";
        }

        /// <summary>
        /// 将日期类型数据转换为 yyyy/MM/dd hh:mm  这种格式
        /// </summary>
        /// <param name="dateTime">要转换的日期类型数据</param>
        /// <returns>返回转换后的日期数据</returns>
        public static string ToDateyyyyMMddhhmm(this DateTime? dateTime)
        {
            if (dateTime != null)
            {
                DateTime dt = dateTime.ToString().ToDateTime(DateTime.MinValue);
                return dt.Year.ToString() + "/" + dt.Month.ToString() + "/" + dt.Day.ToString() + " " +(dt.Hour < 10 ? "0" + dt.Hour : dt.Hour.ToString()) + ":" + (dt.Minute < 10 ? "0" + dt.Minute : dt.Minute.ToString());
            }

            return "";
        }
    }
}
